package com.pet.system.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.GZIPInputStream;

import org.apache.http.Header;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.protocol.HttpContext;

import com.pet.role.util.Logger;


import sun.misc.BASE64Encoder;

public class SmsHelper {

	public static Logger logger = Logger.getLogger(SmsHelper.class);
	
    public static void sendMessageTo(String phone, String message){
    	try{
    		logger.logInfo("sendMessageTo(phone="+phone+",message="+message+")");
            DefaultHttpClient client = new DefaultHttpClient();
            client.addRequestInterceptor(new HttpRequestInterceptor() {
                @Override
                public void process(HttpRequest request, HttpContext context) throws HttpException, IOException {
                    request.addHeader("Accept-Encoding", "gzip");
                    request.addHeader("Authorization", "Basic " + new BASE64Encoder().encode("api:0ee84b8110ac16e18ca3168055c48ddf".getBytes("utf-8")));
                }
            });
            client.getParams().setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 30000);
            client.getParams().setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 30000);
            HttpPost request = new HttpPost("https://sms-api.luosimao.com/v1/send.json");
            ByteArrayOutputStream bos = null;
            InputStream bis = null;
            byte[] buf = new byte[10240];
            String content = null;
            try {
                List<NameValuePair> params = new ArrayList<NameValuePair>();
                params.add(new BasicNameValuePair("mobile", phone));
                params.add(new BasicNameValuePair("message", message+"【花千束】"));
                request.setEntity(new UrlEncodedFormEntity(params, "utf-8"));
                HttpResponse response = client.execute(request);
                if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                    bis = response.getEntity().getContent();
                    Header[] gzip = response.getHeaders("Content-Encoding");

                    bos = new ByteArrayOutputStream();
                    int count;
                    while ((count = bis.read(buf)) != -1) {
                        bos.write(buf, 0, count);
                    }
                    bis.close();

                    if (gzip.length > 0 && gzip[0].getValue().equalsIgnoreCase("gzip")) {
                        GZIPInputStream gzin = new GZIPInputStream(new ByteArrayInputStream(bos.toByteArray()));
                        StringBuffer sb = new StringBuffer();
                        int size;
                        while ((size = gzin.read(buf)) != -1) {
                            sb.append(new String(buf, 0, size, "utf-8"));
                        }
                        gzin.close();
                        bos.close();

                        content = sb.toString();
                    } else {
                        content = bos.toString();
                    }

                    logger.logDebug(content);
                } else {
                	logger.logDebug("error code is " + response.getStatusLine().getStatusCode());
                }
            } finally {
                if (bis != null) {
                    try {
                        bis.close();// 最后要关闭BufferedReader
                    } catch (Exception e) {
                    }
                }
            }
    	}catch(Exception e){
    		e.printStackTrace();
    	}
    	
    }
    
    public static void main(String[] args)throws Exception {
    	sendMessageTo("18610921396", "hello【花千束】");
    }
}
